Car operating system

ABSTRACT

Our car operating system allows a car&#39;s driver to control—using abstract direction and speed commands—the car&#39;s core resources that make the car move. The car operating system then translates those high-level abstractions to a lower level of abstraction, providing device-specific commands to the car devices that will implement the driver&#39;s commands. That means that the same car operating system can work on a wide variety of car configurations. That differs from the control system for today&#39;s cars, which is hardwired into the car&#39;s design and lasts from the car&#39;s manufacture to its junking. Each model of today&#39;s car has a custom control system (steering wheel, accelerator, brake pedal) that cannot be replaced by the control system from another car, even though they do the same thing. Our car operating system allows car technology to evolve more rapidly and carmaking to become a more vibrant industry.

We gave the patent office as a text file a computer code listing for an example car operating system. That code listing contains the 18,468-byte ASCII file “CarOS.txt” that was created on Feb. 19, 2016. The CarOS.txt file contains Python code that will run on a Linux or Windows computer.

That code listing is part of the disclosure of this invention. A copy of the code listing can be obtained from the patent office. Or contact either of us (the inventors) for a copy.

INTRODUCTION

Imagine your computer without an operating system.

That means your keyboard must be hardwired into your computer. Same with your mouse. Your monitor. Your hard disk drive. Your memory. Your power supply. Your case.

Every part of your computer must be picked during the design process to fit into your particular model of computer. The parts must be made to order, then permanently soldered, screwed and welded together in a factory to make your computer.

To repair a broken part, you must find and order the same exact part for your model of computer. Then, because all the parts are tightly coupled together, you must take your computer apart, unsolder old wires and solder in the new ones.

Or let's say you want to upgrade your computer hardware. Say you want to put in a new solid-state drive to replace your old hard drive. You can, but it's not easy. You must fit the new hardware into a system not designed for it.

And to handle your new hardware, you must rewrite your software. That's because all the software that runs your computer (and all the software that runs on your computer) must be custom written for your model of computer alone.

Sound unusual? It should. That's not how your computer works. Your computer is a lot more flexible than that. Your computer has an operating system that handles your hardware so you don't have to. Upgrades are easy. So is replacement of a failed part. They are meant to be that way.

But your car works differently. It works like a computer that has no operating system. Upgrades are almost impossible. Repairs are hard. There is no flexibility to change your car's hardware without changing the way the whole car works.

Systems theorist Russell Ackoff explained how this works by imagining trying to build the world's greatest car by using the world's greatest car parts. Say you pick the engine from a Ferrari, the brakes from a Porsche, the suspension from a BMW, and the body from a Volvo.

That collection of the world's greatest car parts would not be a great car. Not even close. It would be a pile of junk. Those parts do not go together—they were not designed to work that way. The performance of a system—its achievement of its aims—depends as much on the interactions among parts as on the parts themselves. A system is more than just a collection of parts.

Because of that, on a conventional car the parts are carefully designed to interact and work together. They must be, in order for the conventional car to work. With conventional cars, a part from one car rarely works in another car. Even if it does, you have a Frankenstein's monster of a car—more frightening than useful.

A car operating system lets a car work differently than conventional cars. A car operating system takes care of the interactions between the car's parts so you can combine parts from different cars to make a new car. The car operating system controls how the parts making up the car interact to do what the car's driver wants.

FIG. 3 shows how that works.

Of course, things are a not quite that simple. So we will discuss in detail below three questions:

-   -   What is a car operating system?     -   Why is a car operating system important?     -   How does a car operating system work?

What is a Car Operating System?

A car operating system does what its name suggests—it operates the car as a system. As noted above, a car is not just a collection of parts. Instead, it is a collection of parts designed to work together and operate as a system.

The driver interacts with the car through the operating system, but the driver does not even know that the operating system is there. The operating system coordinates, communicates with, and controls the other parts of the car to make the car do what its driver wants. But the operating system does not itself do anything mechanical to make the car move in the physical world.

Speaking metaphorically, a car operating system lets the car's brain interact with the rest of the car, controlling the drive train, steering, brakes, and other devices in the car (headlights, windshield wipers, air conditioning, door locks) like a human brain controls a human body.

More literally, a car operating system is a software and hardware system that manages a car's resources—especially those resources that make the car move in a particular direction at a particular speed—so that they carry out the wishes of the car's driver.

The car operating system does this by allowing the driver to express her, his or (in the case of a self-driving car) its wish at a high level of abstraction. The details of how the car is to carry out this wish are hidden in that abstraction. The car operating system then reduces that wish down to device-specific commands at a lower level of abstraction that requires more knowledge of actual implementation details.

Talking about abstractions is a little abstract. Let's take a concrete example.

Suppose you want to turn a light off. To do that, you flip a light switch. Flipping the switch stops the flow of electricity through the light, and the light turns off. You directly controlled the light by moving a physical switch. There's nothing abstract about it.

Now suppose that you want the light off, so you say to your spouse, “Turn off the light, please.” The light goes off. In this case, you did not yourself flip the switch, but instead made a request, or “command,” to get your spouse to flip the switch. You used an abstraction.

Your command is an abstraction because it took the form of words in the English language, which are related to the physical world but do not directly affect it. In order for your abstract command to have an effect, something has to take concrete action in the physical world.

A car operating system manages the car resources by first taking abstract commands from the driver and making those commands more device specific. The car operating system allows the car's driver to express his, her or its wishes in an abstract way that is not related to the particular hardware in the car.

The car operating system then translates those wishes into more concrete (at a lower level of abstraction) commands to specific car resources. That way, the driver does not need to worry about, or even know, how the driver's wishes are being carried out in the concrete physical world.

In general, a driver cares about where the car goes. Usually, that means two things: (1) what direction the car is going, and (2) at what speed. The car's driver does not care how those things are done, as long as they are done.

Specifically, the driver does not need to know whether the car has a gasoline engine or an electric motor, how many wheels are getting power, what angle the wheels are being steered at, or any of the other concrete resources that must be managed for the car to move at the desired speed in the desired direction.

Those implementation details can be hidden using abstraction. Abstraction enforces a clear separation between the abstract wish of the driver and the concrete details of how the wish is carried out.

By design, a car operating system is not limited to work only in a particular model of car. Instead, a car operating system has well-defined and publicly known interfaces to make it work in many different kinds of cars. In each car it performs the function of taking abstract commands from a driver and making the car's hardware carry out those commands.

Most computers have operating systems. But cars today do not have a car operating system that—similar to a computer operating system—manages the resources of the car by taking in abstract commands from the driver and translating those commands into less abstract commands to individual car resources.

Car resources can be of three basic types, which may be handled separately by the operating system:

-   -   1. Core Resources: the traction motors, steering gear and brakes         that change the direction and speed of the car.     -   2. Other Driving-Related Resources: things like headlights,         signal lights and windshield wipers that are related to driving         but do not actually change the direction or speed of the car.     -   3. Comfort Resources: things like entertainment, communication,         heating and cooling, and navigation devices that are not         directly related to moving the car.

A car operating system manages the core resources of the car, but it may also manage other driving-related resources and comfort resources as well. The car operating system may also handle the communication between those resources.

Finally, one caution. We give below a more detailed description of an example car operating system. Here we simply sketch out the basic concept of what a car operating system is. What we say here should not be used to define the scope of our invention—that is the job of the claims. But this background may help understand the remaining sections of this patent.

Why is a Car Operating System Important?

To start, let's look back in time to when cars were more primitive, and the driver had to directly control devices in ways that modern drivers never do. An excerpt from the John Steinbeck 1952 book East of Eden illustrates how “hands-on” a Ford Model T used to be for the driver to even start:

“‘Now you see that-there? That's the ignition key. When you turn that-there you're ready to go ahead. Now, you push this do-hickey to the left. That puts her on battery see, where it says Bat. That means ‘battery’ . . . .

“‘No—wait. I got ahead of myself. First you got to retard the spark and advance the gas, else she'll kick your goddam arm off. This-here—see it?—this-here's the spark. You push it up—get it?—up. Clear up. And this-here's the gas—you push her down . . . . ’

“‘Now you ready? Spark retarded, gas advanced. Spark up, gas down. Now switch to battery—left, remember—left.’ A buzzing like that of a gigantic bee sounded. ‘Hear that? That's the contact in one of the coil boxes. If you don't get that, you got to adjust the points or maybe file them.’ . . . .

“‘Now this-here is the crank and—see this little wire sticking out of the radiator?—that's the choke. Now watch careful while I show you. You grab the crank like this and push till she catches. See how my thumb is turned down? If I grabbed her the other way with my thumb around her, and she was to kick, why, she′d knock my thumb off. Got it?’ . . . .

“‘Now,’ he said, “look careful. I push in and bring her up until I got compression, and then, why, I pull out this wire and I bring her around careful to suck gas in. Hear that sucking sound? That's choke. But don't pull her too much or you'll flood her. Now, I let go the wire and I give her a hell of a spin, and as soon as she catches I run around and advance the spark and retard the gas and I reach over and throw the switch quick over to magneto—see where it says Mag?—and there you are.’”

In a Model T Ford, the driver had to know a lot about how the car's resources worked to even start the car, and the driver had to directly control those resources. An old-fashioned automobile that could be started only with a crank required a person to make a series of adjustments directly to the engine and other car parts.

In a modern car, of course, you need only turn a key and a system of electrical and mechanical devices does the rest. But these electrical and mechanical devices still operate only with the particular equipment in the car. There is no operating system that takes commands from the driver and sends less abstract commands to the car's hardware.

How exactly does our car operating system differ from the control systems of today's cars? How about conventional cars, with internal combustion engines? Or advanced cars like the Chevy Volt, with more than 100 microprocessors and over 10 million lines of computer code? (As shown in FIG. 2.) Or the Tesla Model S, an electric-only car with advanced computer control?

To answer that question, let us look back at the Ford Model T, and trace from there the evolution of car control. As noted above, the driver of a Model T had to directly operate—using mechanical controls like wheels, pedals, levers and knobs—the various machines that made up the car.

Then controls began to evolve. Brakes and steering became power brakes and power steering, so that the driver's control of the brakes and steering was amplified. Then antilock braking became common. More and more, cars became easier to control. To the driver, the car became simpler.

Today's cars seem to be moving to drive-by-wire systems, which are closer to what we have invented, but not the same. Drive-by-wire systems have controls that are no longer purely mechanical connections, but instead are electrical. That gives the opportunity to have an operating system in the middle between the driver and the car's hardware, but today's drive-by-wire systems do not include such an operating system.

Why not? Operating systems for gasoline cars do not really make sense. Even if the controls are drive-by-wire, the whole control system is designed specifically for use on one particular car. Since the car will never change in its basic design, there's no need for an operating system that can handle different hardware. Control can be direct, without the overhead of handling abstractions.

Electric cars like the Tesla Model S are the same way. Even if you consider the Model S to have an operating system of sorts, it is a custom operating system made by Tesla (the car's maker), designed to run only on a Model S, and designed to run on no other car. And that's not our invention. Our invention would make no sense running on a Model S.

An operating system like ours does make sense on a modular car. A modular car consists of individually designed and constructed modules connected together through specified interfaces. One module, for example, might be an electrical power module, another a body module, another the chassis, and so on.

When cars are modular, they can have different hardware configurations and still run the same operating system. The operating system handles any configuration. Because all modules plug into a common operating system, they can be mixed and matched on an almost plug-and-play basis to build a car to fit every driver's desires.

This concept—a modular architecture for a product, with an operating system that always presents the same interface to the product's user-took the computer industry by storm. In fact, Apr. 7, 1964 is perhaps the most important date in the history of computing. IBM announced its IBM 360 series of computer on that date, and computing has never been the same.

Before that date, innovation in the computer industry was steady but slow. Since then, with the advent of modular computer systems, it has exploded. Just as a computer operating system and modular hardware changed the computer industry, making cars modular and using our car operating system in modular cars can ignite the carmaking industry.

That's the car operating system from a historical view. Let's look at it from a more functional view. In the modern computer (by contrast with cars), an operating system has developed to fill the role of go-between. On one end you have the computer's user who wants to be able to order up a piece of long division, say, simply by supplying two numbers to the machine and ordering it to divide them.

At the other end stands the actual computer, which for all its complexity is an idiot savant. It can perform only basic operations, and long division may not be one of them. The machine typically must be instructed to perform a sequence of several of its basic operations in order to accomplish a piece of long division.

Software—a series of what are known as programs—translates the computer user's wish into specific, functional commands for the machine. One of those programs, the operating system, is usually the only program from which hardware components and devices receive instructions.

All other programs sit on top of the operating system and interact with the hardware only through it. So the operating system takes abstract commands from the user, either directly or through an application program, and translates them to make specific devices take specific actions.

A car operating system does the same thing in a car, and that brings several advantages. Using a car operating system can:

-   -   simplify the design of the car considerably     -   enable different car part makers to specialize in different         technologies, yet still participate directly in the market         (rather than only through a carmaker)     -   support the portability of car resources

Another big advantage of a car operating system is the ability to add new modules and functions to a car as “plug and play” functions rather than having to redesign and re-integrate the car.

For example, suppose a car owner wanted to add a new collision avoidance system to his or her car. With a car operating system, the maker of the collision avoidance system could provide everything necessary to plug the system into any car, and have it work immediately. Just like plug-and-play works with computers using Windows.

Indeed, as we mentioned above, the computer industry changed dramatically as computers became modular. IBM's System 360 was extremely successful in the market, allowing customers to purchase a smaller system with the knowledge they would always be able to migrate upward if their needs grew, without reprogramming of application software or replacing peripheral devices.

The same thing can happen with cars. Now when you buy a car you are stuck with it until you junk it or sell it. You cannot upgrade it. If your car were modular and had a car operating system, you could buy a car knowing that you could change it as technology improved or your needs or wants changed.

Finally, using a car operating system can change a lot about how cars work, and how cars are made. Car technology can evolve more quickly. And the car industry can become more vibrant—filled with creative destruction where stagnating companies die out and growing companies replace them.

How does a Car Operating System Work?

A car operating system includes computer software and hardware. The car operating system takes the driver's abstract command, such as for direction and speed, and translates it to less abstract commands to car resources. In this example, to do that, the car operating system does two things:

-   -   1. Creates and maintains a map of car resources (as shown in         FIG. 5).     -   2. Accepts a stream of abstract commands from the car's driver         and translates them into less abstract commands to car resources         (as shown in FIG. 7).

In this example, we discuss how a car operating system manages the resources of the car that relate to driving. That is, the core resources of the car (the traction motors, steering gear and brakes that change the direction and speed of the car) and the other driving-related resources (things like headlights, signal lights and windshield wipers that are related to driving but do not actually change the direction or speed of the car).

The part of the car operating system that controls the core speed and direction resources of the car is like the kernel of a computer operating system. The other parts of the car operating system can malfunction and the car can still go. Without the core resources, the car does not go.

In this example, we will not discuss the comfort resources of the car (things like entertainment, communication, heating and cooling, and navigation devices that are not directly related to moving the car). That is because they are the easiest for the car operating system to manage, and can be handled much like the other driving-related resources.

If desired, different software and hardware can handle core resources, other driving-related resources, and comfort resources. That may allow for greater security related to core resources, and greater flexibility for comfort resources. In this example, we have combined all the code into one computer program running on one computer.

The software code for this detailed example of a car operating system is in our code listing filed with the patent office. The car operating system is written in Python, and can run on any Windows or Linux computer that has a Python interpreter, an Internet connection, and USB ports connected to two Arduino Uno microcontrollers. The software code and the computer together make up the car operating system.

To try the software code out, you will need two other things. First, a program that translates movement by a driver of a joystick or other controller into commands that the car operating system understands, and sends over the Internet to the correct socket of the computer. Second, a car for the driver to drive. Since there are currently no real cars built to run our car operating system, we have built a small test-bed car. A car simulator can also be used.

The Car Resource Map

In this example, the car operating system builds and maintains a car resource map. This is a map of the available resources in the car, their current status, how they are called for by the driver, and how they are commanded by the car operating system.

The car resource map can be maintained in different ways. In this example, we set up the device values in the car resource map with the codes shown in FIG. 10A. The car operating system changes the variables listed so that the value for a device name contains the current state of the device. For example, if the left turn signals are turned on, the value of the variable TURN_SIGNAL changes from ‘OFF’ to ‘LEFT’ (FIG. 5).

In this example, changes to the car resources available to the car must be hardcoded as device names in the resource map. The program must also be changed when new devices are added or when old devices are dropped to reflect the interface specifications for the new device (FIG. 6).

The Command Parser

When the car operating system receives a command, the first thing it does is to see which command it received (FIG. 4). This is done by parsing the command, first getting the command word and then getting the command value, if any.

Let's take an example. Say the car operating system gets the following command from the driver control unit: “STEERING<0x03>-127<0x04>” First it gets the command word from the command, which is “STEERING”. The hexadecimal 03 acts as a delimiter, setting off the command word.

Once the parser finds the STEERING command word, it passes off the rest of the command to a STEERING command handler routine. There the value in the command is peeled off (using the hexadecimal 04 as a delimiter) and turned into an integer.

Once the STEERING command and the 120 value have been interpreted, the command parser's work is done. Then control is turned over to the STEERING command handler routine to prepare and send commands to the actual motors that will move the car forward.

Command Handlers

Each command needs its own handler routine. That command handler can turn the abstract command received from the driver control unit into less abstract commands to the devices needed to carry out that command. Here again, an example may help explain.

Take steering as an example. FIG. 8A illustrates the steering system in a conventional car, where everything is mechanical. The driver turns the steering wheel, a gearbox pushes and pulls the wheels into the correct steering angle, and the car turns.

In contrast, FIG. 8B illustrates a steering system in a car with a car operating system. Let's trace the path of a steering command STEERING −127 in our example. First, the driver control unit sends over a network socket the command STEERING<0x03>-127<0x04>. The car operating system parses that command, and sends it to the STEERING command handler routine, which turns the −127 value into an integer.

The STEERING command handler routine then calculates the appropriate steering angle for each of the car's steerable wheels. In this example, the car's two front wheels are steerable. But as with the differential, where each powered wheel would need a different speed command if the car were turning, with steering each wheel will need to turn at a different angle due to car physics.

In today's cars, this difference in wheel angle is hardwired into the car's design as the Ackermann angle. The two front wheels of the car are usually linked together by a linkage that creates a parallelogram geometry. That geometry, though an approximation of the ideal geometry, works well enough in most cases.

A car operating system can do things differently. In this example, the car operating system calculates the steering angle for each wheel by setting the steering angle for the inside wheel to the desired steering angle (in this case −127, or full left) and then calculates the steering angle for the outside wheel using this equation:

steer=arctangent(1/(1/tangent(currentSteerAngle)+Track/Wheelbase))

While this equation will give what is called the Ackerman angle, other equations can be used, including an equation that can use the car's speed as a parameter. This is important since the Ackermann angle is not always best for steering. Some race cars, for example, have reverse Ackermann steering, where the outside wheel in a turn is at a sharper angle than the inside wheel.

Returning to our STEERING −127 example, the steering for the left front wheel will be sent a signal to turn to position −127 (a full left turn of 30 degrees) and the right front wheel a signal to turn to position −93 (a left turn of about 22 degrees), assuming the track-over-wheelbase ratio to be 0.6.

In this example, the car operating system generates a command for the left front wheel that is L<0x00> and the right rear wheel that is R<0x22>. The “L” and “R” stand for left and right wheel steering, and the value is a single-byte hexadecimal value for 0 and 34 (both the −127 and −93 values have been added to 127 to give a non-negative integer).

The car operating system sends those commands as serial signals over a USB cable to an Arduino microcontroller. The Arduino microcontroller then decodes the signals and actually controls the steering actuator for each wheel to make the wheel turn to the signaled position.

To sum up, the car's driver decides that he or she wants to turn a certain direction, and indicates that using a driver control unit. The driver control unit receives the driver's desired direction and converts that desire into the STEERING −127 command, which is an abstraction that has no meaning in the concrete world.

The car operating system then parses that abstract command and, with a command handler that uses knowledge of the devices available in the car and the physics of how those devices operates, converts it into the device-specific commands L<0x00> and R<0x22>. Those commands are still abstract, but at a lower level of abstraction closer to the real world.

Let's look at another example, using a FORWARD command. A conventional car has a linkage between a gas pedal and an engine throttle. If the car is turning, the outside wheel will need to travel farther than the inside wheel, so it will need to move at a faster speed. A differential handles that on today's conventional cars.

In our example operating system, by contrast, the car's driver decides that he or she wants to go forward at a certain speed, and indicates that using a driver control unit. It could be by pushing down on an accelerator pedal, pulling in an accelerator paddle, setting a cruise control, typing words on a keyboard, or could even generated by a computer in a self-driving car.

If the car is turning, the car operating system then calculates the difference in speed between the car's inside and outside wheels using these car parameters:

-   -   desired speed for the car,     -   track (the width between the right and left wheels),     -   wheelbase (the length between the front and back wheels), and     -   car's current turning angle.         With those parameters, the equation for the inside wheel's speed         is:

speed=carSpeed/(1+(Track/Wheelbase)*tangent(currentSteerAngle))

In today's cars, a complicated differential gear system is needed to make sure the powered wheels can turn freely going around a turn. With a car operating system, all that is needed is one line of code to accomplish the same thing.

Of course, with each wheel being powered separately, as in this example, there is no need to power the wheels to try to make them turn at any particular speed. So for example, to improve car stability and handling, only the outside wheel might be powered going around a turn. Or the inside wheel might be braked slightly—given “negative torque”—to increase a yaw effect and thus move the car more rapidly through the turn.

The Physics Engine

In this example of a car operating system, we separate out the equations that depend on car characteristics—such as the differential propulsion and the Ackermann steering—into a separate code section called the physics engine. That makes it easier to modify the car operating system for different cars or upgraded cars, since the command handlers may not need to be changed, but only the physics engine.

CONCLUSION

We traced above the parsing and handling of two commands (STEERING and FORWARD) in this example of our car operating system. FIGS. 9A and 9B show how the handling of braking evolved from early cars to later cars to a car with a car operating system. Many other commands are also implemented in our computer code appendix.

The interface between the car operating system and the driver control unit, whereby the car operating system receives abstract commands, is shown in FIGS. 10A and 10B. The interfaces between the car operating system and other modules of the car, whereby the car operating system sends abstract (but less abstract) commands, are shown in FIGS. 11 to 14.

The command parser can recognize each of the commands listed in FIG. 10A, and since each command has its own command handler in the car operating system, can send the value accompanying the command to the command handler.

In this way, the car operating system can receive abstract commands from the car's driver and process them to send less-abstract commands to the devices that will carry out the driver's commands. That means that abstract commands can be used to drive a car in the desired direction at the desired speed in the real world.

To enable cars to be made up of parts from more than just one company, the interfaces between the driver and the car operating system, and the interfaces between the car operating system and the other modules of the car, must be made available to other companies. The interfaces can be made public, or they may be licensed for a fee.

DRAWINGS

FIG. 1 shows in a cartoon a prior art example of how an abstraction—the driver's feeling of guilt—might be used to control a car.

FIG. 2 shows an advertisement for the prior art Chevy Volt's control system that has over 10 million lines of computer code.

FIG. 3 compares a hardwired computer to a computer with an operating system, and similarly, compares a conventional car to a car with a car operating system.

FIG. 4 shows a box diagram of an example of how a car operating system processes a command from a driver into a device-specific command that is at a lower level of abstraction.

FIG. 5 shows an example of a partial map of car devices.

FIG. 6 shows an example of maintaining a map of car devices.

FIG. 7 shows the flow of control from the driver to the car devices.

FIG. 8A shows how steering normally works in today's cars.

FIG. 8B shows an example of how steering might work with our car operating system.

FIGS. 9A and 9B show how the handling of braking evolved from early cars to later cars to a car with a car operating system.

FIG. 10A shows an example of car operating system specifications for exchanging data with a driver control unit.

FIG. 10B shows notes and examples on the car operating system data interface specifications.

FIG. 11 shows the data interface specifications between the motor controllers and the car operating system.

FIG. 12 shows the data interface specifications between the wheel/motor modules and the car operating system.

FIG. 13 shows the data interface specifications between the body module and the car operating system.

FIG. 14 shows the data interface specifications between the chassis module and the car operating system. 

We claim:
 1. A method for operating a car that includes at least the following steps using computer hardware and software: creating a map of the specific devices that are available on the car, maintaining the map as the devices available change, receiving a command—such as indicating the desired motion (direction and speed) of the car or asking that another function be performed by the car—from the driver of the car, parsing the driver's command to understand the driver's command and any values associated with it, determining which of the devices are needed to carry out the driver's commands, calculating for each device the device-specific commands needed for the car to provide the resources to implement the driver's command, and sending to each device the device-specific commands—such as direction and speed signals for the car's wheels—required to carry out the driver's command, where the device-specific commands are at a lower-level of abstraction than the driver's commands.
 2. The car operating system of claim 1 where the abstractions allow modularity in the car so that modules in the car can be replaced by other modules that perform the same function.
 3. A system—including computer software and hardware—for operating a car that: makes a car's resources available to the car's user by use of abstract commands, coordinates the devices providing the resources that implement the user's commands, and provides less abstract commands that are appropriate for each device so that a device can be replaced without requiring the car operating system to be replaced.
 4. A car operating system—including computer software and hardware—that accepts (as input) the desired motion (direction and speed) of the car and produces (as output) steering and speed signals for at least one of the car's wheels.
 5. The car operating system of claim 4 where the signals indicating the desired motion of the car come from a human driver.
 6. The car operating system of claim 4 where the signals indicating the desired motion of the car come from an automated driving program.
 7. The car operating system of claim 4 where the car operating system provides a communication network so that any system in the car can communicate with any other system in the car.
 8. The car operating system of claim 4 where the car operating system controls the interaction between the devices of the car.
 9. The car operating system of claim 5 where the input from the driver is voice input. 